package com.medic.service.interf;



import java.util.List;

import com.medic.entity.Assitant;
import com.github.pagehelper.Page;

import com.medic.entity.Doctor;
import com.medic.entity.Group;
import com.medic.entity.GroupUser;
import com.medic.entity.Pharmacist;
import com.medic.entity.User;
import com.medic.entity.VerifyRole;





public interface GroupServiceInterface extends ServiceInterface<Group> {
	
	
	
	/**
	 * 
	 * 患者个人进组(需审批)
	 * @throws Exception
	 * 
	 */
	public void userJoinGroup(int groupid,int userid) throws Exception;
	/**
	 * 医生个人进组(需审批) 
	 * @throws Exception
	 */
	public void doctorJoinGroup(int groupid,int doctorid) throws Exception;

	/**
	 * 药师个人进组(需审批)
	 * @throws Exception
	 */
	public void pharmacistJoinGroup(int groupid,int pharmacistid) throws Exception;
	/**
	 * 助手个人进组(需审批)
	 * @throws Exception
	 */
	public void assitantJoinGroup(int groupid,int assitantid) throws  Exception;
	
	
	
	/**
	 * 药师入组(管理员操作无需批准)
	 * @param list 批量加入的药师的id
	 * @param groupid 
	 * @throws Exception
	 */
	public void pharmacisBatchJoinGroup(int[] list, int groupid) throws Exception;
	
	/**
	 * 医生入组(管理员操作无需批准)
	 * @param list 批量加入的医生的id
	 * @param groupid
	 * @throws Exception
	 */
	public void doctorBatchJoinGroup(int[]  list,int groupid) throws Exception;

	
	/**
	 * 患者入组(管理操作无需批准)
	 * @param list 批量加入的患者的id
	 * @param groupid
	 * @throws Exception
	 */
	public void userBatchJoinGroup(int[] list, int groupid) throws Exception;
	
	
	/**
	 *  助手入组(管理员操作无需批准)
	 * @param list 批量加入的助手的id
	 * @param groupid
	 * @throws Exception
	 */
	public void assitantBatchJoinGroup(int[] list, int groupid) throws Exception;


	/**
	 * 患者退组若无则传null
	 * @param list 退组的患者id	 
	 *  @param group 组id 
	 * @throws Exception
	 */
	public void userExitGroup(int group,int[] list) throws Exception;
	
	/**
	 * 药师退组若无则传null
	 * @param list 退组的药师id
	 * @param group 组id
	 * @throws Exception
	 */
	public void pharmacistExitGroup(int group,int[] list) throws Exception;

	
	/**
	 * 医生退组，无则传null
	 * @param list 退组的医生id
	 * @param group 组id
	 * @throws Exception
	 */
	public void doctorExitGroup(int group,int[] list) throws Exception;
	/**
	 * 助手退组若无则传null
	 * @param list 退组的助手id
	 * @param group 组id
	 * @throws Exception
	 */
	public void assitantExitGroup(int group,int[] list) throws Exception;
	
	
	/**
	 * 拿到某组的所有医生 
	 * @return
	 */
	public List<Doctor> getDoctorByGroup(int groupid) throws Exception;
	
	/**
	 * 拿到某组的所有药师
	 * @return
	 */
	public List<Pharmacist> getPharmacistByGroup(int  groupid) throws Exception;
	
	/**
	 * 拿到某组的所有助手 
	 * @return
	 */
	public List<Assitant> getAssitantByGroup(int groupid) throws Exception;
	
	/**
	 * 拿到某组的所有患者,可通过name和phone来查询 
	 * @return
	 */
	public Page<User> getUserByGroup(int  groupid,int pageno,String where) throws Exception;
	
	/**
	 * 把申请入组的患者审核通过(管理员) 
	 * @param list 申请入组的患者id 
	 * @throws Exception
	 */
	public void checkUser(int[] list)throws Exception ;

	/**
	 * 把申请入组的助手审核通过(管理员) 
	 * @param list 申请入组的助手id 
	 * @throws Exception
	 */
	public void checkAssitant(int[] list)throws Exception ;
	/**
	 * 把申请入组的医生审核通过(管理员) 
	 * @param list 申请入组的医生id 
	 * @throws Exception
	 */
	public void checkDoctor(int[] list)throws Exception ;

	/**
	 * 把申请入组的药师审核通过(管理员) 
	 * @param list 申请入组的药师id 
	 * @throws Exception
	 */
	public void checkPharmacist(int[] list)throws Exception ;

	/**
	 * 医生的入组申请不通过
	 * @param list   不通过id 
	 * @throws Exception
	 */
	public void nopassDoctor(int[] list) throws Exception ;
	/**
	 * 患者的入组申请不通过
	 * @param list 不通过id
	 * @throws Exception
	 */
	public void nopassUser(int[] list) throws Exception ;
	/**
	 * 药师的入组申请不通过
	 * @param list  不通过id
	 * @throws Exception
	 */
	public void nopassPharmacist(int[] list) throws Exception ;
	
	 /**
	 * 助手的入组申请不通过
	 * @param list 不通过id
	 * @throws Exception
	 */
	public void nopassAssitant(int[] list) throws Exception ;

	
	
	
	/**
	 * 创建组
	 * @throws Exception
	 */
	public void createGroup(Group g) throws Exception;
	
	 
	/**
	 * 解散组
	 * @throws Exception
	 */
	public void dismissGroup(int groupid) throws Exception;

	
	/**
	 * 查询患者所进入的组 
	 * @param userid
	 * @return
	 * @throws Exception
	 */
	public List<Group> getGroupByUser(int userid) throws Exception;
	/**
	 *  查询医生所进入的组
	 * @param doctorid
	 * @return
	 * @throws Exception
	 */
	public List<Group> getGroupByDoctor(int doctorid) throws Exception;
	/**
	 * 查询助手所进入的组
	 * @param assitantid
	 * @return
	 * @throws Exception
	 */
	public List<Group> getGroupByAssitant(int assitantid) throws Exception;
	/**
	 * 查询药师所进入的组  
	 * @param pharmacistid
	 * @return
	 * @throws Exception
	 */
	public List<Group> getGroupByPharmacist(int pharmacistid) throws Exception;
	
	/**
	 * 根据where条件拿到组
	 * @param where  为null时查询全部
	 * @return
	 * @throws Exception
	 */
	public List<Group> getGroup(String where) throws Exception;

	/**
	 * 拿到未通过角色审核的入组资料
	 * @return
	 */
	public Page<VerifyRole> getNopassRole(String role, int pageno) throws Exception;
	
	
	/**
	 * 查询不在某一组的医生 
	 * @param groupid 组的id
	 * @param where 查询条件 name /phone
	 * @return 医生的数组
	 * @throws Exception
	 */
	public List<Doctor> getDoctorNotinGroup(int groupid, String where)throws Exception;
	/**
	 * 查询不在某一组的药师  
	 * @param groupid 组的id
	 * @param where 查询条件 name /phone
	 * @return 药师 的数组
	 * @throws Exception
	 */
	public List<Pharmacist> getPharmacistNotinGroup(int groupid, String where)throws Exception;
	
	/**
	 * 查询不在某一组的患者
	 * @param groupid 组的id
	 * @param where 查询条件 name /phone
	 * @return 患者的数组
	 * @throws Exception
	 */
	public List<User> getUserNotinGroup(int groupid, String where)throws Exception;	
	/**
	 * 查询不在某一组的助手 
	 * @param groupid 组的id
	 * @param where 查询条件 name /phone
	 * @return 助手的数组
	 * @throws Exception
	 */
	public List<Assitant> getAssitantNotinGroup(int groupid, String where)throws Exception;
	
	public Group getGroupById(int groupid) throws Exception;
	
	public int getUserCountByGroup(int group)throws Exception;
	
	public Page<Group> getGroup(int pageno) throws Exception;
	/**
	 * 查找角色没有进入的组 
	 * @param role
	 * @param roleid
	 * @return
	 * @throws Exception
	 */
	public List<Group> getNotinGroupByRole( int roleid,String role) throws Exception;

	
	/**
	 * 通过medic_user_group 的id查询患者组信息 
	 * 
	 * @param id
	 * @return  
	 * @throws Exception
	 */
	public GroupUser getGroupUserById(int id) throws Exception;
	
	
}
